package pl.edu.mimuw.mas.tools;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import pl.edu.mimuw.mas.agent.behaviour.MutableTimedBehaviour;

/**
 * Singleton służący do modyfikowania opoźnień agentów. Pole <code>scale</code>
 * służy jako stała multyplikatywna dla czasów opoźnień w zachowaniu
 * {@link MutableTimedBehaviour}.
 */
public class PeriodModifier {

	// Singleton
	private static PeriodModifier instance = new PeriodModifier(1.0);
	
	public static PeriodModifier getInstance() {
		return instance;
	}
	
	// Class
	private double scale;
	private Logger log = LoggerFactory.getLogger(getClass());
	
	private PeriodModifier(double scale) {
		if(scale <= 0) {
			throw new IllegalArgumentException("Scale must be greater than 0");
		}
		this.scale = scale; 
	}
	
	public double getScale() {
		return this.scale;
	}

	public void setScale(double scale) {
		this.scale = scale;
		log.info("Ustawiono mnożnik czasu na {}", this.scale);
	}
	
	public long getModifiedPeriod(long t) {
		return  ((Double) (t * scale)).longValue();
	}
}
